package com.zhengbing.tj.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.AllArgsConstructor;

import java.time.LocalDateTime;
import java.util.Date;

/**
 * 审计日志实体类
 * 记录系统中数据的变更操作明细
 *
 * @author zhengbing
 * @date 2024-08-22
 */
@TableName("audit_log")
@Api(tags = "审计日志")
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class AuditLog extends Model<AuditLog> {
    /**
     * 日志ID
     */
    @ApiModelProperty(value = "日志ID", example = "123456789012345678")
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 操作人ID
     */
    @ApiModelProperty(value = "操作人ID", example = "123456789012345678")
    private Long operatorId;

    /**
     * 操作人名称
     */
    @ApiModelProperty(value = "操作人名称", example = "张三")
    private String operatorName;

    /**
     * 操作类型
     * INSERT: 新增
     * UPDATE: 修改
     * DELETE: 删除
     */
    @ApiModelProperty(value = "操作类型", example = "UPDATE")
    private String operationType;

    /**
     * 操作实体
     * 如: user, role, permission
     */
    @ApiModelProperty(value = "操作实体", example = "user")
    private String entityName;

    /**
     * 实体ID
     */
    @ApiModelProperty(value = "实体ID", example = "123456789012345678")
    private Long entityId;

    /**
     * 操作前数据
     * 以JSON格式存储
     */
    @ApiModelProperty(value = "操作前数据")
    private String beforeData;

    /**
     * 操作后数据
     * 以JSON格式存储
     */
    @ApiModelProperty(value = "操作后数据")
    private String afterData;

    /**
     * 变更字段详情
     * 以JSON格式存储
     */
    @ApiModelProperty(value = "变更字段详情")
    private String changeDetails;

    /**
     * 操作IP地址
     */
    @ApiModelProperty(value = "操作IP地址", example = "192.168.1.1")
    private String ipAddress;

    /**
     * 操作时间
     */
    @ApiModelProperty(value = "操作时间")
    private LocalDateTime operationTime;

    /**
     * 操作描述
     */
    @ApiModelProperty(value = "操作描述", example = "修改用户信息")
    private String description;
    
    /**
     * 实体类型
     * 与entityName功能类似，为兼容AuditLogUtil中使用的属性而添加
     */
    @ApiModelProperty(value = "实体类型", example = "user")
    private String entityType;
    
    /**
     * 创建时间
     * 为兼容AuditLogUtil中使用的属性而添加
     */
    @ApiModelProperty(value = "创建时间")
    private Date createTime;
    
    /**
     * 更新时间
     * 为兼容AuditLogUtil中使用的属性而添加
     */
    @ApiModelProperty(value = "更新时间")
    private Date updateTime;
    
    /**
     * 操作人IP地址
     * 与ipAddress功能类似，为兼容AuditLogUtil中使用的属性而添加
     */
    @ApiModelProperty(value = "操作人IP地址", example = "192.168.1.1")
    private String operatorIp;
}